Skip to content

Fix race when handling rapid succession of MQTT discovery messages#68785

Merged
balloob merged 5 commits intodevfrom
mqtt_discovery_race
Mar 30, 2022
Merged

Fix race when handling rapid succession of MQTT discovery messages#68785
balloob merged 5 commits intodevfrom
mqtt_discovery_race

Conversation

@emontnemery
Copy link
Copy Markdown
Contributor

@emontnemery emontnemery commented Mar 28, 2022

Proposed change

Fix race when handling rapid succession of MQTT discovery messages

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New integration (thank you!)
  • New feature (which adds functionality to an existing integration)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

Checklist

  • The code change is tested and works locally.
  • Local tests pass. Your PR cannot be merged unless tests pass
  • There is no commented out code in this PR.
  • I have followed the development checklist
  • The code has been formatted using Black (black --fast homeassistant tests)
  • Tests have been added to verify that the new code works.

If user exposed functionality or configuration variables are added/changed:

If the code communicates with devices, web services, or third-party tools:

  • The manifest file has all fields filled out correctly.
    Updated and included derived files by running: python3 -m script.hassfest.
  • New or updated dependencies have been added to requirements_all.txt.
    Updated by running python3 -m script.gen_requirements_all.
  • For the updated dependencies - a link to the changelog, or at minimum a diff between library versions is added to the PR description.
  • Untested files have been added to .coveragerc.

The integration reached or maintains the following Integration Quality Scale:

  • No score or internal
  • 🥈 Silver
  • 🥇 Gold
  • 🏆 Platinum

To help with the load of incoming pull requests:

await super().async_added_to_hass()
self._prepare_subscribe_topics()
await self._subscribe_topics()
self.async_send_discovery_done()
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

async_added_to_hass is overrided called from sensor and binary_sensor. These overrides should process the restore before calling super().async_added_to_hass

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be async_added_to_hass is also called when a config_entry is added.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems no issue since self.async_send_discovery_done() is not doing anything when the entity is restored, only when it is discovered.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MQTT entities are only added when they are discovered.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correct

@emontnemery emontnemery force-pushed the mqtt_discovery_race branch from 68e178f to 9742fad Compare March 29, 2022 16:19
@emontnemery emontnemery force-pushed the mqtt_discovery_race branch from 9742fad to 762bcaf Compare March 29, 2022 16:23
@balloob balloob merged commit 7e8d52e into dev Mar 30, 2022
@balloob balloob deleted the mqtt_discovery_race branch March 30, 2022 03:26
@github-actions github-actions bot locked and limited conversation to collaborators Mar 31, 2022
"""Verify event got called."""
events.append(event)

hass.bus.async_listen(EVENT_STATE_CHANGED, callback)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have this helper:

def async_capture_events(hass, event_name):

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MQTT Exception in availability_message_received when handling msg.

5 participants